import { Commit, StoreOptions } from 'vuex';
import moment from 'moment';
import { getToken } from '@/utils/auth';
import { isEmptyObject } from '@/utils/Object';

const common = {
    namespaced: true,
    state: {
        // 卡片列表   多张信用卡信息3074
        cardList_3601: [],

        // 卡账户信息 3001按卡号查询卡账户资料信息
        cardAccountInfo_3001: {},

        // 卡信息 3004按卡号查询卡资料信息
        cardInfo_3004: {},
        // 最新公告数据
        noticeData: [],
        // 客户信息 3002
        customerInfo_3002: {},

        // 客户地址信息
        customerAdressInfo_3003: {},

        // 3014信用卡服务方式综合查询
        CreditCardService_3014: {},

        // 3054卡片信用历史查询
        CreditCardHistory_3054: {},

        // 3005信用卡账单头查询
        CardBill_3005: {},

        // 3077分期付款交易明细查询 卡片级
        InstallmentInfo_3077: [],

        // 当前用户已有的 账户类别
        AccountionTYPE_INFO: [],

        // 接通电话  软电话传过来的 SessionId
        currentSessionId: '',

        // 接通电话  软电话传过来的currentSessionId 对应的 SessionObj
        currentSessionObj: {},

        // 会话队列数量
        SessionQueues: '0',

        // 当前通过的身份验证级别，0-未通过任何身份验证，1-低风险级别身份验证，2-中风险级别身份验证，3-高风险级别身份验证,4-加核项风险验证
        currentRiskLevel: 0,

        // 4017自扣还款账号信息
        AutoRepayAcct_4017: {},
        // 软电话传过来的 SessionObjList 数据列表
        // SessionObjList:[],

        // 卡系统 -- 公用请求报文头
        //  sessionID 是从 softphone-1.0.0.js里取的 currentSessionId 值
        defaultParams: {
            sysHead: { // 系统报文
                clientSeq: 'FDSAF', // 客户端流水号，可用UUID32标志
                chnlNo: 'CSR', // 渠道号： CSR-客服系统，IVR-自助语音系统，webchat-在线客服
                sessionID: '00281046501564471348', // 呼叫编号（会话ID）：语音渠道呼叫编号，文本渠道会话ID
                callAni: '12345678912', // 来电号码
                callDnis: '9555', // 被叫号码
                busiType: '51', // 业务类型：对应业务菜单功能编号或IVR自助语音流程编号
                busiName: '客户视图', // 业务名称：对应业务菜单名称或IVR自助语音流程名称
                loginID: getToken() !== '' ? JSON.parse(getToken()).userAccount : '', // 坐席登录编号
                agentName: getToken() ? JSON.parse(getToken()).userName : '', // 坐席姓名
                ctiNo: getToken() ? JSON.parse(getToken()).ctiNum : '', // 坐席签入CTI工号
            },
            body: { // 报文
                appHead: { // 业务报文
                    tranCode: '3001', // 交易代码
                    retCode: '', // 响应码，上送空
                    bnknbr: '6440', // 银行号
                    source: 'AG', // 交易来源
                    brnNo: '100001', // 网点代号
                    opeNo: getToken() ? JSON.parse(getToken()).agNum : '', // 操作员号 取用户信息agNum字段
                    seqNo: '000000', // 通讯交易流水号，可以不上
                },
                appBody: { // 具体业务报文 -- 页面字段  默认卡更改卡号
                },
            },
        },

        // 行内交易 -- 公用请求报文头
        inlineParams: {
            sysHead: { // 系统报文
                clientSeq: '', // 客户端流水号，可用UUID32标志
                chnlNo: 'IVR1', // 渠道号： CSR-客服系统，IVR-自助语音系统，webchat-在线客服
                sessionID: '00281046501564471348', // 呼叫编号（会话ID）：语音渠道呼叫编号，文本渠道会话ID
                callAni: '12345678912', // 来电号码
                callDnis: '9555', // 被叫号码
                busiType: '51', // 业务类型：对应业务菜单功能编号或IVR自助语音流程编号
                busiName: '客户视图', // 业务名称：对应业务菜单名称或IVR自助语音流程名称
                loginID: '3866770', // 坐席登录编号
                agentName: '测试坐席', // 坐席姓名
                ctiNo: '5802001', // 坐席签入CTI工号
            },
            body: { // 报文
                appHead: { // 业务报文
                    // BNKNBR: '6440',
                    tranCode: '', // 交易码
                    tranSeq: '000000', // 流水号
                    tranTime: moment(new Date()).format('HHmmss'), // 交易时间
                    tranDate: moment(new Date()).format('YYYY-MM-DD'), // 交易日期
                    teller: 'XNA601', // 操作员号
                    brc: '06100096', // 交易机构
                    channelId: 'A6', // 渠道代码
                    authFlag: '0', // 授权标志
                    aBrc: '111111', // 授权机构
                    aTeller: '111111', // 授权柜员
                    seqNo: '012A60000031997',
                },
                appBody: { // 具体业务报文 -- 页面字段

                },
            },
        },

        // 检查标志 -- true 代表验证通过
        checkData: {
            passwordCheckFlag: false, // 密码 校验标志
            authenticationFla_M: false, // 中风险身份验证标志
            authenticationFla_H: false, // 高风险身份验证标志
            reservedMobileCheckFlag: false, // 预留手机号 校验标志
            msgCheckFlag: false, // 短信验证 校验标志
            accountStatusCheckFlag: false, // 账户状态 校验标志
            cardStatusCheckFlag: false, // 卡片状态 校验标志
        },
        checAllData: {},//菜单校验缓存字段

        checkMustForm: {
            ifhascard: '',//是否可获得卡片信息
            idnopass: '',//证件号码验证通过标识，1-通过，0-不通过
            expirepass: '',//有效期验证通过标识，1-通过，0-不通过
            cardnopass: '',//卡号验证通过标识，1-通过，0-不通过
        },
        checkUnmustForm: {
            mbphonepass: '',//手机号码验证通过标识，1-通过，0-不通过
            resvpass: '',//预留问题验证通过标识，1-通过，0-不通过
            resv2pass: '',//预留答案验证通过标识，1-通过，0-不通过
            stmtaddrpass: '',//账单地址验证通过标识，1-通过，0-不通过
            connamepass: '',//联系人姓名验证通过标识，1-通过，0-不通过
            crdlimtpass: '',//信用额度验证通过标识，1-通过，0-不通过
            autopaypass: '',//自扣还款验证通过标识，1-通过，0-不通过
            stmtaddtppass: '',//账单地址类型验证通过标识，1-通过，0-不通过
            homephonepass: '',//家庭电话验证通过标识，1-通过，0-不通过
            emailpass: '',//电子邮箱验证通过标识，1-通过，0-不通过
            stmtdaypass: '',//账单日验证通过标识，1-通过，0-不通过
            comaddrpass: '',//单位地址验证通过标识，1-通过，0-不通过
            homeaddrpass: '',//家庭地址验证通过标识，1-通过，0-不通过
            comnamepass: '',//单位名称验证通过标识，1-通过，0-不通过
            comphonepass: '',//单位电话验证通过标识，1-通过，0-不通过
            cnamepass: '',//姓名汉字验证通过标识，1-通过，0-不通过
            cpurpass: '',//最近一笔交易
        },

        // 是否检查密码标志
        pinFlag: 0, // 0-不检查， 1-检查卡片级查询密码，2-检查取款密码

        //
        loadNum: 0, // app.vue 文件加载次数
        // 校验规则？  这块好像没有用到
        VALIDRULE: [],
    },

    mutations: {
        /**
         * 更新卡片信息
         * @param state
         * @param cardInfo_3004 当前卡片信息
         */
        UPDATE_CARD_INFO_ONE(state: any, cardInfo_3004: any) {
            if (!isEmptyObject(cardInfo_3004)) {
                state.cardInfo_3004 = cardInfo_3004;
            }
        },
        // 更新最新公告状态
        UPDATE_NOTICEDATA(state: any, noticeData: any) {
            state.noticeData = noticeData;
        },

        /**
         * 更新卡片信息
         * @param state
         * @param cardAccountInfo_3001 当前卡片信息
         */
        UPDATE_CARD_ACCOUNT_INFO(state: any, cardAccountInfo_3001: any) {
            if (!isEmptyObject(cardAccountInfo_3001)) {
                state.cardAccountInfo_3001 = cardAccountInfo_3001;
            } else {
                state.cardAccountInfo_3001 = {};
            }
        },

        /**
         * 更新卡片列表信息
         * @param state
         * @param cardList_3601 卡片列表数据
         */

        UPDATE_CARD_LIST(state: any, cardList_3601: any) {
            state.cardList_3601 = cardList_3601;
        },

        DEL_ALL_CARD_LIST(state: any) {
            state.cardList_3601 = [];
        },
        DEL_ALL_CARD_INFO_ONE(state: any) {
            state.cardInfo_3004 = {};
        },
        /**
         * 更新3077分期付款交易明细查询
         * @param state
         * @param InstallmentInfo_3077 卡片列表数据
         */

        UPDATE_CARD_INSTALLMENT_INFO(state: any, InstallmentInfo_3077: any) {
            state.InstallmentInfo_3077 = InstallmentInfo_3077;
        },

        DEL_ALL_CARD_INSTALLMENT_INFO(state: any) {
            state.InstallmentInfo_3077 = [];
        },
        // /**
        //  * 更新卡片信息
        //  * @param state
        //  * @param defaulaCardInfo 默认卡片信息
        //  */
        // UPDATE_CARD_INFO(state: any, defaulaCardInfo) {
        //     state.defaulaCardInfo = defaulaCardInfo;
        // },

        /**
         * 更新 --卡系统-- 默认请求报文信息
         * @param state
         * @param defaultParams 最新请求报文信息
         */
        UPDATE_DEFAULT_PARAMS(state: any, defaultParams: any) {
            state.defaultParams = defaultParams;
        },
        //更新 busiName 字段
        UPDATE_DEFAULT_BUSINAME(state: any, view: any) {
            if (state.defaultParams.busiName) {
                state.defaultParams.busiName = view;
            }
        },

        /**
         * 更新 --行内交易-- 默认请求报文信息
         * @param state
         * @param inlineParams 最新行内交易请求报文信息
         */
        UPDATE_INLINE_PARAMS(state: any, inlineParams: any) {
            state.inlineParams = inlineParams;
        },

        /**
         * 更新客户信息
         * @param state
         * @param customerInfo 顾客信息
         */
        UPDATE_CUS_INFO(state: any, customerInfo_3002: any) {
            state.customerInfo_3002 = customerInfo_3002;
        },

        ////////////////////////////////////// 密码信息更新

        // this.customerInfo_3002.PINSET  查询密码标识修改
        UPDATE_CUS_INFO_PINSET(state: any, view: any) {
            if (state.customerInfo_3002.PINSET) {
                state.customerInfo_3002.PINSET = view;
            }
        },

        //  this.cardInfo_3004.PINSET  设置密码标识
        UPDATE_CARD_INFO_ONE_PINSET(state: any, view: any) {
            if (state.cardInfo_3004.PINSET) {
                state.cardInfo_3004.PINSET = view;
            }
        },

        /**
         * 更新客户地址信息
         * @param state
         * @param customerAdressInfo_3003 地址信息
         */
        UPDATE_CUS_ADDR_INFO(state: any, customerAdressInfo_3003: any) {
            if (!isEmptyObject(customerAdressInfo_3003)) {
                state.customerAdressInfo_3003 = customerAdressInfo_3003;
            } else {
                state.customerAdressInfo_3003 = {};
            }
        },

        /**
         * 更新 3014信用卡服务方式综合查询
         * @param state
         * @param CreditCardService_3014 地址信息
         */
        UPDATE_CREDIT_CARD_SERVICE(state: any, CreditCardService_3014: any) {
            if (!isEmptyObject(CreditCardService_3014)) {
                state.CreditCardService_3014 = CreditCardService_3014;
            } else {
                state.CreditCardService_3014 = {};
            }
        },

        /**
         * 更新 3054卡片信用历史查询
         * @param state
         * @param CreditCardHistory_3054
         */
        UPDATE_CREDIT_CARD_HISTORY(state: any, CreditCardHistory_3054: any) {
            if (!isEmptyObject(CreditCardHistory_3054)) {
                state.CreditCardHistory_3054 = CreditCardHistory_3054;
            } else {
                state.CreditCardHistory_3054 = {};
            }
        },

        /**
         * 更新 3054卡片信用历史查询
         * @param state
         * @param CardBill_3005  
         */
        UPDATE_CARD_BILL(state: any, CardBill_3005: any) {
            if (!isEmptyObject(CardBill_3005)) {
                state.CardBill_3005 = CardBill_3005;
            } else {
                state.CardBill_3005 = {};
            }
        },

        /**
        * 更新 4017自扣绑定还款账号信息
        * @param state
        * @param AutoRepayAcct_4017
        */
        UPDATE_AUTOREPAY_ACCT(state: any, AutoRepayAcct_4017: any) {
            if (!isEmptyObject(AutoRepayAcct_4017)) {
                state.AutoRepayAcct_4017 = AutoRepayAcct_4017;
            } else {
                state.AutoRepayAcct_4017 = {};
            }
        },



        /**
         * 更新 AccountionTYPE_INFO 账户类型数据
         * @param state
         * @param AccountionTYPE_INFO
         */
        UPDATE_Accountion_TYPE_INFO(state: any, AccountionTYPE_INFO: any) {
            if (!isEmptyObject(AccountionTYPE_INFO)) {
                // 排序 把个人卡 放到第一位
                let compare = function (prop: any) {
                    return function (obg1: any, obg2: any) {
                        let val1 = parseInt(obg1[prop]);
                        let val2 = parseInt(obg2[prop]);
                        if (val1 < val2) {
                            return -1;
                        } else if (val1 > val2) {
                            return 1;
                        } else {
                            return 0;
                        }
                    };
                }

                AccountionTYPE_INFO = AccountionTYPE_INFO.sort(compare('code'))
                state.AccountionTYPE_INFO = AccountionTYPE_INFO;
            } else {
                state.AccountionTYPE_INFO = [];
            }
        },
        /**
         * 更新密码检查标志
         * @param state
         * @param pinFlag 是否检查密码标志
         */
        UPDATE_PIN_FLAG(state: any, pinFlag: any) {
            state.pinFlag = pinFlag;
        },

        /**
         * 更新校验标志数据
         * @param state
         * @param checkData 校验标志数据
         */
        UPDATE_CHECK_FLAG(state: any, checkData: any) {
            state.checkData = checkData;
        },
        // 保存校验
        SAVE_CHECK_DATA(state: any, checAllData: any) {
            state.checAllData = checAllData;
        },


        //清空业务风险校验必核项内容
        RESET_CHECK_MUST_FORM(state: any) {

            let checkMustForm = {
                ifhascard: '',//是否可获得卡片信息
                idnopass: '',//证件号码验证通过标识，1-通过，0-不通过
                expirepass: '',//有效期验证通过标识，1-通过，0-不通过
                cardnopass: '',//卡号验证通过标识，1-通过，0-不通过
            };

            state.checkMustForm = checkMustForm;
        },

        //  保存业务风险校验必核项内容
        SAVE_CHECK_MUST_FORM(state: any, checkMustForm: any) {
            state.checkMustForm = checkMustForm;
        },

        //清空业务风险校验选核项内容
        RESET_CHECK_UNMUST_FORM(state: any) {

            let checkUnmustForm = {
                mbphonepass: '',//手机号码验证通过标识，1-通过，0-不通过
                resvpass: '',//预留问题验证通过标识，1-通过，0-不通过
                resv2pass: '',//预留答案验证通过标识，1-通过，0-不通过
                stmtaddrpass: '',//账单地址验证通过标识，1-通过，0-不通过
                connamepass: '',//联系人姓名验证通过标识，1-通过，0-不通过
                crdlimtpass: '',//信用额度验证通过标识，1-通过，0-不通过
                autopaypass: '',//自扣还款验证通过标识，1-通过，0-不通过
                stmtaddtppass: '',//账单地址类型验证通过标识，1-通过，0-不通过
                homephonepass: '',//家庭电话验证通过标识，1-通过，0-不通过
                emailpass: '',//电子邮箱验证通过标识，1-通过，0-不通过
                stmtdaypass: '',//账单日验证通过标识，1-通过，0-不通过
                comaddrpass: '',//单位地址验证通过标识，1-通过，0-不通过
                homeaddrpass: '',//家庭地址验证通过标识，1-通过，0-不通过
                comnamepass: '',//单位名称验证通过标识，1-通过，0-不通过
                comphonepass: '',//单位电话验证通过标识，1-通过，0-不通过
                cnamepass: '',//姓名汉字验证通过标识，1-通过，0-不通过
                cpurpass: '',//最近一笔交易验证通过标识，1-通过，0-不通过
            };

            state.checkUnmustForm = checkUnmustForm;
        },

        //  保存业务风险校验选核项内容
        SAVE_CHECK_UNMUST_FORM(state: any, checkUnmustForm: any) {
            state.checkUnmustForm = checkUnmustForm;
        },

        /**
         * 更新校验标志数据
         * @param state
         * @param loadNum app.vue 文件创建次数
         */
        UPDATE_LOAD_NUMBER(state: any, loadNum: any) {
            state.loadNum = loadNum;
        },

        /**
         * 添加校验规则
         * @param state
         * @param VALIDRULE 校验规则数据
         */
        SAVE_LOAD_VALIDRULE(state: any, VALIDRULE: any) {
            state.VALIDRULE = VALIDRULE;
        },


        /**
         * 软件化里的一些数据
         * currentSessionId
         * currentSessionObj
         */
        // 更新currentSessionObj 数据
        UPDATA_CURRENT_SESSION_OBJ(state: any, newObj: any) {
            state.currentSessionObj = newObj;
        },
        // SessionQueues
        UPDATA_SESSION_QUEUES(state: any, queues: any) {
            state.SessionQueues = queues;
        },
        // 清除  currentSessionObj 卡号证件号
        RESET_CURRENT_SESSION_OBJ_ITEM(state: any,) {
            if (state.currentSessionObj.ivrData) {
                state.currentSessionObj.ivrData.data.CARD = '';
                state.currentSessionObj.ivrData.data.IDNO = '';
                state.currentSessionObj.ivrData.data.AUTH = '';
                state.currentSessionObj.ivrData.data.PEGTD = '';
                // state.currentSessionObj.ani = '';
            }
        },

        //更新身份验证级别
        UPDATE_RISKLEVEL(state: any, riskLvel: any) {
            state.currentRiskLevel = riskLvel;
        },
        // 更新 SessionObjList 数据 软电话 完成  更新 SessionObjList 数据
        // UPDATA_SESSION_OBJ_LIST(state:any, newObj:any){
        //     if(!state.SessionObjList.some((item: any) => item.ani === newObj.ani)){
        //         state.SessionObjList.push(newObj)
        //     }else{
        //         for (const [i, v] of state.SessionObjList.entries()) {
        //            if(v.ani === newObj.ani) {
        //                 state.SessionObjList.splice(i,1);
        //                 break
        //            }
        //         }
        //     }
        // },


        // 清空currentSessionObj 数据
        DELECT_CURRENT_SESSION_OBJ(state: any) {
            state.currentSessionObj = {};
            state.currentSessionId = '';
        },

        // 清空 SessionObjList 数据
        // DELECT_SESSION_OBJ_LIST(state:any){
        //     state.SessionObjList = [];
        // },
        // 更新 currentSessionId 数据
        UPDATA_CURRENT_SESSION_ID(state: any, newstr: any) {
            state.currentSessionId = newstr;
        },
        // 清空 currentSessionId 数据
        DELECT_CURRENT_SESSION_ID(state: any) {
            state.currentSessionId = '';
        },

        // 账号退出 清空state
        DELECT_ALL_STATE(state: any) {
            state.cardList_3601 = [];
            state.cardAccountInfo_3001 = {};
            state.cardInfo_3004 = {};
            state.customerInfo_3002 = {};
            state.customerAdressInfo_3003 = {};
            state.currentSessionId = '';
            state.currentSessionObj = {};
            // state.SessionObjList = [];
            state.CreditCardService_3014 = {};
            state.CreditCardHistory_3054 = {};
            state.CardBill_3005 = {};
            state.InstallmentInfo_3077 = [];
            state.noticeData = [];
            state.AccountionTYPE_INFO = [];
            state.AutoRepayAcct_4017 = {};
            state.checAllData = {};
        },
        // 来电小结 后  清除数据 state  关闭客户视图按钮
        DELECT_ALL_STATE_AG(state: any) {
            state.cardList_3601 = [];
            state.cardAccountInfo_3001 = {};
            state.cardInfo_3004 = {};
            state.customerInfo_3002 = {};
            state.customerAdressInfo_3003 = {};
            state.CreditCardService_3014 = {};
            state.CreditCardHistory_3054 = {};
            state.CardBill_3005 = {};
            state.InstallmentInfo_3077 = [];
            state.AccountionTYPE_INFO = [];
            state.AutoRepayAcct_4017 = {};
            state.checAllData = {};
            // state.noticeData = [];
        },
    },

    actions: {

        delAllCardList: (context: { commit: Commit, state: any }) => {
            context.commit('DEL_ALL_CARD_LIST');
        },
        delAllCardInfo: (context: { commit: Commit, state: any }) => {
            context.commit('DEL_ALL_CARD_INFO_ONE');
        },
        delAllcurrentSessionObj: (context: { commit: Commit, state: any }) => {
            context.commit('DELECT_CURRENT_SESSION_OBJ');
        },
        delAllcurrentSessionId: (context: { commit: Commit, state: any }) => {
            context.commit('DELECT_CURRENT_SESSION_ID');
        },
        // 删除所有         //  账号退出 清空state
        delStateAll: (context: { commit: Commit, state: any }) => {
            context.commit('DELECT_ALL_STATE');
            context.commit('RESET_CHECK_UNMUST_FORM');
        },
        // 来电小结   关闭客户视图按钮   后  清除数据 state
        delStateAllag: (context: { commit: Commit, state: any }) => {
            context.commit('DELECT_ALL_STATE_AG');
            context.commit('RESET_CHECK_UNMUST_FORM');
            // 专门 清除卡号 证件号
            context.commit('RESET_CURRENT_SESSION_OBJ_ITEM');

        },
        // 来电小结   关闭客户视图按钮   后  清除数据 state
        delStateAllagNew: (context: { commit: Commit, state: any }) => {
            context.commit('DELECT_ALL_STATE_AG');
            context.commit('RESET_CHECK_UNMUST_FORM');
        },
        // 修改密码设置方法
        set3002PinsetFun: (context: { commit: Commit }, view: any) => {
            context.commit('UPDATE_CUS_INFO_PINSET', view);
        },
        set3004PinsetFun: (context: { commit: Commit }, view: any) => {
            context.commit('UPDATE_CARD_INFO_ONE_PINSET', view);
        },
        setDefaultBusiNameFun: (context: { commit: Commit }, view: any) => {
            context.commit('UPDATE_DEFAULT_BUSINAME', view);

        }
        // state.defaultParams.busiName
        // updataSessingObjList:(context: { commit: Commit,state:any ,newObj:any},)=>{
        //          context.commit("UPDATA_SESSION_OBJ_LIST",newObj:any);
        // }
    },
};

export default common
// {
//     common,
//     // namespace: true,
// };
